Análisis Exploratorio de Datos

Datos INEGI

El Memo de Mileto

2023-12-29

¿Qué es Google Trends?

Como su nombre indica, Google Trends es una herramienta que, en base a los datos registrados en el motor de búsqueda de Google, muestra de manera dinámica y gráfica la frecuencia de temas y términos de búqueda de los usuarios en determinado lapso de tiempo o región del mundo. Por así decirlo, mide la popularidad de cierto tema en un período concreto y en un lugar específico e incluso en determinada plataforma.

Importar librerías

Importar librerias necesarias para este trabajo

library(tidyverse)
library(cowplot)
library(ggplot2)
library(sf)
library(tmap)
library(gt)
library(tibble)
library(knitr)
library(kableExtra)
library(DataExplorer)
library(gganimate)
library(dplyr)
library(gtrendsR)
library(RColorBrewer)
library(wordcloud)
library(wordcloud2)
library(tm)

En este caso vamos a utilizar tidyverse y cowplot. La librería cowplot nos va a ayudar a colocar varias gráficas de forma fácil y ordenada en un sólo espacio EDA de datos de INEGI.

  - ggplot2 Que facilita la creación de gráficas con el sistema de capas 
    (The Language of Graphics escrito por Leland Wilkinson, 2000)
    
  - dplyr que nos ayuda a mandar resultados de un proceso al siguiente 
    utilizando los famosos %>%
    
  - tibble que facilita la manipulación de tablas, transformando los 
    tradicionales data.frame de R a un formato mas amigable visualmente.
    

Cargar los datos

Cargar los datos necesarios para este ejercicio Fuente

# Extraer los datos
path.to.files <- "https://raw.githubusercontent.com/teotenn/INEGI-export/master/"

# Leer los datos por filar
datos_cols <- read_csv(paste0(path.to.files, "exportations_activity_cols.csv"))
## Rows: 384 Columns: 27
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr  (1): state
## dbl (26): year, Exportaciones totales, Industria alimentaria, Industria de l...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

Revisar el tipo de dato de datos_cols

class(datos_cols)
## [1] "spec_tbl_df" "tbl_df"      "tbl"         "data.frame"

Revisar las primeras 10 observaciones de los datos_cols

head(datos_cols, 12)
## # A tibble: 12 × 27
##    state           year `Exportaciones totales` `Industria alimentaria`
##    <chr>          <dbl>                   <dbl>                   <dbl>
##  1 Aguascalientes  2007                 4389841                   36351
##  2 Aguascalientes  2008                 4456893                   44880
##  3 Aguascalientes  2009                 3951108                   54269
##  4 Aguascalientes  2010                 5647929                   56695
##  5 Aguascalientes  2011                 6051640                   74756
##  6 Aguascalientes  2012                 6183782                   92580
##  7 Aguascalientes  2013                 6726207                   99725
##  8 Aguascalientes  2014                 8466007                  106988
##  9 Aguascalientes  2015                 8495445                  117028
## 10 Aguascalientes  2016                 7870962                  106119
## 11 Aguascalientes  2017                 7830019                  108958
## 12 Aguascalientes  2018                 9618407                  116315
## # ℹ 23 more variables: `Industria de las bebidas y el tabaco` <dbl>,
## #   `Fabricación de insumos textiles y acabado de textiles` <dbl>,
## #   `Fabricación de productos textiles, excepto prendas de vestir` <dbl>,
## #   `Fabricación de prendas de vestir` <dbl>, `Industria del papel` <dbl>,
## #   `Industria química` <dbl>, `Industria del plástico y del hule` <dbl>,
## #   `Fabricación de productos a base de minerales no metálicos` <dbl>,
## #   `Industrias metálicas básicas` <dbl>, …

Revisar los nombres de datos_cols

colnames(datos_cols)
##  [1] "state"                                                                                                                 
##  [2] "year"                                                                                                                  
##  [3] "Exportaciones totales"                                                                                                 
##  [4] "Industria alimentaria"                                                                                                 
##  [5] "Industria de las bebidas y el tabaco"                                                                                  
##  [6] "Fabricación de insumos textiles y acabado de textiles"                                                                 
##  [7] "Fabricación de productos textiles, excepto prendas de vestir"                                                          
##  [8] "Fabricación de prendas de vestir"                                                                                      
##  [9] "Industria del papel"                                                                                                   
## [10] "Industria química"                                                                                                     
## [11] "Industria del plástico y del hule"                                                                                     
## [12] "Fabricación de productos a base de minerales no metálicos"                                                             
## [13] "Industrias metálicas básicas"                                                                                          
## [14] "Fabricación de productos metálicos"                                                                                    
## [15] "Fabricación de maquinaria y equipo"                                                                                    
## [16] "Fabricación de equipo de computación, comunicación, medición y de otros equipos, componentes y accesorios electrónicos"
## [17] "Fabricación de equipo de transporte"                                                                                   
## [18] "Fabricación de muebles, colchones y persianas"                                                                         
## [19] "Otras industrias manufactureras"                                                                                       
## [20] "Subsectores no especificados"                                                                                          
## [21] "Minería de minerales metálicos y no metálicos, excepto petróleo y gas"                                                 
## [22] "Curtido y acabado de cuero y piel, y fabricación de productos de cuero, piel y materiales sucedáneos"                  
## [23] "Industria de la madera"                                                                                                
## [24] "Impresión e industrias conexas"                                                                                        
## [25] "Fabricación de accesorios, aparatos eléctricos y equipo de generación de energía eléctrica"                            
## [26] "Extracción de petróleo y gas"                                                                                          
## [27] "Fabricación de productos derivados del petróleo y del carbón"

Revisar las primeras 10 observaciones de los datos_rows

head(datos_cols, 10)
## # A tibble: 10 × 27
##    state           year `Exportaciones totales` `Industria alimentaria`
##    <chr>          <dbl>                   <dbl>                   <dbl>
##  1 Aguascalientes  2007                 4389841                   36351
##  2 Aguascalientes  2008                 4456893                   44880
##  3 Aguascalientes  2009                 3951108                   54269
##  4 Aguascalientes  2010                 5647929                   56695
##  5 Aguascalientes  2011                 6051640                   74756
##  6 Aguascalientes  2012                 6183782                   92580
##  7 Aguascalientes  2013                 6726207                   99725
##  8 Aguascalientes  2014                 8466007                  106988
##  9 Aguascalientes  2015                 8495445                  117028
## 10 Aguascalientes  2016                 7870962                  106119
## # ℹ 23 more variables: `Industria de las bebidas y el tabaco` <dbl>,
## #   `Fabricación de insumos textiles y acabado de textiles` <dbl>,
## #   `Fabricación de productos textiles, excepto prendas de vestir` <dbl>,
## #   `Fabricación de prendas de vestir` <dbl>, `Industria del papel` <dbl>,
## #   `Industria química` <dbl>, `Industria del plástico y del hule` <dbl>,
## #   `Fabricación de productos a base de minerales no metálicos` <dbl>,
## #   `Industrias metálicas básicas` <dbl>, …

Identificar valores ausentes o faltantes

Los valores ausentes o faltantes influyen mucho a la hora de crear modelos, algunos algoritmos no aceptan observaciones incompletas o bien se ven muy influenciados por ellas, en este caso las Métricas de evaluación, no admiten valores faltantes, por lo que es necesario identifcar con cuantos N/A, cuenta nuetro data frame.

Para identifica el número de datos ausentes por variable vamos a emplear la siguiente función

plot_missing(
  data    = datos_cols, 
  title   = "Porcentaje de valores Faltantes por variable",
  ggtheme = theme_bw(),
  theme_config = list(legend.position = "none")
)

Eliminar los datos faltes

datos_cols_0 <- na.omit(datos_cols)

Organizando los datos

En este caso lo primero es seleccionar solo algunos de los datos que tiene este data frame para esto es necesario seleccionar las columnas de 1 s 5, de 21 a 23, 25 a 27

    - 1 state   
    - 2 year    
    - 3 Exportaciones totales   
    - 4 Industria alimentaria   
    - 5 Industria de las bebidas y el tabaco    
    - 21 Minería de minerales metálicos y no metálicos, excepto petróleo y gas
    - 22 Curtido y acabado de cuero y piel, y fabricación de productos de cuero, piel 
    - 23 Industria de la madera 
    - 25 Fabricación de accesorios, aparatos eléctricos y equipo de generación de energía eléctrica 
    - 26 Extracción de petróleo y gas
    - 27 Fabricación de productos derivados del petróleo y del carbón

Para esto vamos a emplear la función de select() y seleccionamos las columnas con base a la númeración anterior

datos_0 <- select(datos_cols, c(1,2,3,4,5,21,22,23,25,26,27))

Como segundo paso vamos cambiar los nombres de las variables, ya que son demasiado largos y puede generar problemas, para esto lo primero es generar un vector con los nombres que se desean en el data frame de datos_0

nombres <- c("Estado", "Year", "Totales", "Alimentaria", "Bebidas", "Mineria_Metal_Notal",
             "Curtido_Piel", "Madera", "Electronicos", "Extraccion_Petroleo_Gas",
             "Productos_Petroleo_Gas")
nombres
##  [1] "Estado"                  "Year"                   
##  [3] "Totales"                 "Alimentaria"            
##  [5] "Bebidas"                 "Mineria_Metal_Notal"    
##  [7] "Curtido_Piel"            "Madera"                 
##  [9] "Electronicos"            "Extraccion_Petroleo_Gas"
## [11] "Productos_Petroleo_Gas"

Ahora vamos a usar la función de names() incorporando el data frame de datos_0 y le asignamos el vector de nombres

names(datos_0) <- nombres

El siguiente paso es realizar un group_by() por estado para generar un nuevo data frame con el promedio de los 12 años (2007 - 2018) por estado.

La función group_by() agrupa un conjunto de filas seleccionado en un conjunto de filas de resumen de acuerdo con los valores de una o más columnas o expresiones.

La función group_by() es extremadamente útil trabajando en conjunción con la función summarise():

  pollution %>%  group_by(city) %>% 
       summarise(mean = mean(amount), sum = sum(amount), n = n())

En este ejemplo vamos a agrupar por Estado y calcular la media de cada sector y almacenarlo en la variable de datos_1

datos_1 <- datos_0 %>%
  group_by(Estado) %>%
  summarise(Totales = mean(Totales), 
                Alimentaria = mean(Alimentaria),
                Bebidas = mean(Bebidas), 
                Mineria_Metal_Notal = mean(Mineria_Metal_Notal),
                Curtido_Piel = mean(Curtido_Piel), SW_mena = mean(Madera),
                Electronicos = mean(Electronicos), Ext_P_G = mean(Extraccion_Petroleo_Gas),
                Productos_P_G = mean(Productos_Petroleo_Gas)
             )

Visualizar las 10 primeras observaciones de datos_1

head(datos_1)
## # A tibble: 6 × 10
##   Estado    Totales Alimentaria Bebidas Mineria_Metal_Notal Curtido_Piel SW_mena
##   <chr>       <dbl>       <dbl>   <dbl>               <dbl>        <dbl>   <dbl>
## 1 Aguascal…  6.64e6      84555.     NA                  NA            NA     NA 
## 2 Baja Cal…  3.32e7     151198.  97966.                 NA            NA  43095.
## 3 Baja Cal…  1.92e5      28405.     NA                  NA            NA     NA 
## 4 Campeche   2.20e7         NA      NA                  NA            NA     NA 
## 5 Chiapas    1.11e6     108136.     NA                  NA            NA     NA 
## 6 Chihuahua  3.89e7     420840.  80031.             784567.       171142     NA 
## # ℹ 3 more variables: Electronicos <dbl>, Ext_P_G <dbl>, Productos_P_G <dbl>

Visualizar los datos de forma interactiva

DT::datatable(datos_1)

Visualización

La visualización de datos ha ganado espacio en diversas publicaciones y en las últimas décadas ya constituye una disciplina en sí misma.

En este paso se realizara una visualización tus datos usando el paquete ggplot2. D

e los muchos sistemas que posee R para hacer gráficos, ggplot2 es uno de los más elegantes y versátiles. Esto se debe a que ggplot2 implementa un sistema c oherente para describir y construir gráficos,

conocido como la gramática de gráficos. Con ggplot2 puedes hacer más cosas en menor tiempo, aprendiendo un único sistema y aplicándolo en diferentes ámbitos.

Generar grafico

ggplot(datos_1) +
      geom_bar(aes(y = Totales,
                   x = Estado,
                   fill = Totales),
               stat = 'identity') 

Modificar el gráfico para poder dar un mejor diseño

ggplot(datos_1) +
      geom_bar(aes(y = Totales,
                   x = reorder(Estado, Totales, FUN = abs),
                   fill = Totales),
               stat = 'identity') +
      coord_flip()

ggplot(datos_1) +
      geom_bar(aes(y = Totales,
                   x = reorder(Estado, Totales, FUN = abs),
                   fill = Totales),
               stat = 'identity') +
  labs(title = "Exportación media por Estado (2007 - 2018)",
         x = "Estado") +
        coord_flip()

Generar un grafico que muetsre el comportamiento de las exportaciones totales atra vez del tiempo

ggplot(dplyr::filter(datos_0, Estado == "Aguascalientes"),
       aes(x = Year, y = Totales)) +
    geom_line() +
    geom_point() +
    facet_wrap(~`Estado`) +
    theme_minimal() +
    transition_reveal(Year)+
  coord_cartesian(clip = 'off') +
  enter_fade() + 
  exit_shrink()
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?
## `geom_line()`: Each group consists of only one observation.
## ℹ Do you need to adjust the group aesthetic?

dplyr::filter(datos_0, Estado == "Aguascalientes")
## # A tibble: 12 × 11
##    Estado      Year Totales Alimentaria Bebidas Mineria_Metal_Notal Curtido_Piel
##    <chr>      <dbl>   <dbl>       <dbl>   <dbl>               <dbl>        <dbl>
##  1 Aguascali…  2007 4389841       36351      NA                  NA           NA
##  2 Aguascali…  2008 4456893       44880      NA                  NA           NA
##  3 Aguascali…  2009 3951108       54269      NA                  NA           NA
##  4 Aguascali…  2010 5647929       56695      NA                  NA           NA
##  5 Aguascali…  2011 6051640       74756       0                  NA           NA
##  6 Aguascali…  2012 6183782       92580      NA                  NA           NA
##  7 Aguascali…  2013 6726207       99725       0                  NA           NA
##  8 Aguascali…  2014 8466007      106988       0                  NA           NA
##  9 Aguascali…  2015 8495445      117028      NA                  NA           NA
## 10 Aguascali…  2016 7870962      106119      NA                  NA           NA
## 11 Aguascali…  2017 7830019      108958      NA                  NA           NA
## 12 Aguascali…  2018 9618407      116315      NA                  NA           NA
## # ℹ 4 more variables: Madera <dbl>, Electronicos <dbl>,
## #   Extraccion_Petroleo_Gas <dbl>, Productos_Petroleo_Gas <dbl>

Crear un Boxplot en R

ggplot(datos_1, aes(x = Estado, y = Totales, fill=Estado)) + 
  geom_boxplot()

= < >

ggplot(dplyr::filter(datos_1, Totales >= 30000000), aes(x = Estado, y = Totales, fill=Estado)) + 
  geom_boxplot()

Como siguiente paso es necesario generar una union espacial, para esto es necesario primero buscar que claves se presentan en estados y en el data frame de datos_1

datos_1$Cve_Ent <- as.integer(seq(1:32))
estados <- read_sf("Datos/Estados.shp")
estados$Ent_Cve
##  [1]  1  2  3  4  8  9  5  6  7 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
## [26] 26 27 28 29 30 31 32
estados_1 <- inner_join(x = estados, y = datos_1, by = c("Ent_Cve" = "Cve_Ent"))
tmap_mode("view")
## tmap mode set to interactive viewing
tm_shape(estados_1) +
  tm_fill(col = "Totales",
          palette = "Oranges",
          style = "cont",
          contrast = c(0.1,1),
          title = "Exportacion media por Estado (2007 - 2018)",
          id = "Estado",
          showNA = FALSE,
          alpha = 0.8,
          popup.vars = c( "Industria alimentaria" = "Alimentaria",
                          "Exportaciones 2007-2018" = "Totales"
                          # "Escorrentia Promedio 2011" = "Esc_mean_2011",
                          # "Infiltracion Promedio 2011" = "Inf_mean_2011"
                          ))+
  tm_borders(col = "darkgray", lwd = 0.6)+
  tm_basemap("OpenStreetMap")

Librerias usadas en este trabajo

sessioninfo::package_info() %>% 
  filter(attached==TRUE) %>% 
  select(package, loadedversion, date, source) %>% 
  gt() %>% 
  tab_header(title='Paquetes utilizados',
             subtitle='Versiones') %>% 
  opt_align_table_header('left')
Paquetes utilizados
Versiones
package loadedversion date source
cowplot 1.1.1 2020-12-30 CRAN (R 4.3.1)
DataExplorer 0.8.2 2020-12-15 CRAN (R 4.3.1)
dplyr 1.1.3 2023-09-03 CRAN (R 4.3.1)
forcats 1.0.0 2023-01-29 CRAN (R 4.3.1)
gganimate 1.0.8 2022-09-08 CRAN (R 4.3.1)
ggplot2 3.4.4 2023-10-12 CRAN (R 4.3.2)
gt 0.9.0 2023-03-31 CRAN (R 4.3.1)
gtrendsR 1.5.1 2022-05-23 CRAN (R 4.3.2)
kableExtra 1.3.4 2021-02-20 CRAN (R 4.3.1)
knitr 1.43 2023-05-25 CRAN (R 4.3.1)
lubridate 1.9.2 2023-02-10 CRAN (R 4.3.1)
NLP 0.2-1 2020-10-14 CRAN (R 4.3.1)
purrr 1.0.2 2023-08-10 CRAN (R 4.3.1)
RColorBrewer 1.1-3 2022-04-03 CRAN (R 4.3.0)
readr 2.1.4 2023-02-10 CRAN (R 4.3.1)
sf 1.0-14 2023-07-11 CRAN (R 4.3.1)
stringr 1.5.0 2022-12-02 CRAN (R 4.3.1)
tibble 3.2.1 2023-03-20 CRAN (R 4.3.1)
tidyr 1.3.0 2023-01-24 CRAN (R 4.3.1)
tidyverse 2.0.0 2023-02-22 CRAN (R 4.3.1)
tm 0.7-11 2023-02-05 CRAN (R 4.3.2)
tmap 3.3-3 2022-03-02 CRAN (R 4.3.1)
wordcloud 2.6 2018-08-24 CRAN (R 4.3.2)
wordcloud2 0.2.1 2018-01-03 CRAN (R 4.3.2)